home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
BORL_TIP
/
TI100
/
TI743.ASC
< prev
next >
Wrap
Text File
|
1992-08-12
|
3KB
|
133 lines
PRODUCT : Turbo Pascal NUMBER : 743
VERSION : 1.0
OS : Windows
DATE : August 12, 1992 PAGE : 1/2
TITLE : Loop Processing in Windows
There are two basic ways of handling loop processing in Windows
that would otherwise take away control (tie up processing of your
code and not allow other processes to run) of other running
Window's applications. The first and probably the most flexible
approach is to write a processing loop and 'YIELD' to other
Windows application's request. The second approach would be to
override TApplication's MessageLoop method and within the
MessageLoop call your process.
'YIELD'
If your procedure that takes a while to execute contains some
sort of outer loop, make a call to a procedure that allows other
apps to run. Your time consuming code might look something like:
...
While MoreToDo do
begin
YieldToOthers;
DoSomeProcessing;
end;
A few notes concerning this procedure:
* The call to HALT may need to be modified to do any cleanup
required
(i.e.: close open files, etc.).
* You'll need to be sensitive to re-entrant issues.
The procedure "YieldToOthers" would look like:
Procedure YieldToOthers;
var
Msg : TMsg;
begin
While PeekMessage(Msg,0,0,0,PM_REMOVE) do begin
if Msg.Message = WM_QUIT then begin
Application^.Done;
halt; {!!}
end;
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
PRODUCT : Turbo Pascal NUMBER : 743
VERSION : 1.0
OS : Windows
DATE : August 12, 1992 PAGE : 2/2
TITLE : Loop Processing in Windows
end;
'MessageLoop'
This is a replacement for the TApplication MessageLoop method.
It provides for an 'idle loop' where your program can
continuously process its own work, and yet still yield control to
windows when windows needs to do something.
TMyApp = object(TApplication)
procedure MessageLoop; virtual; { add this method to your }
end; {* descendant of TApplication *}
{* just paste this in to your program *}
procedure TMyApp.MessageLoop;
var
Message: TMsg;
begin
while true do begin
if PeekMessage(Message, 0, 0, 0, pm_Remove) then begin
if Message.Message = wm_Quit then Exit;
TranslateMessage(Message);
DispatchMessage(Message);
end
else begin
{** do your stuff here **}
end;
end;
Status := Message.WParam;
end;
DISCLAIMER: You have the right to use this technical information
subject to the terms of the No-Nonsense License Statement that
you received with the Borland product to which this information
pertains.